<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>击鼓传花</title>
	</head>
	<body>
		<script>
			// 封装队列类
			function Quene() {
				// 属性
				this.items = [];

				// 方法
				// 1. 将元素加入到队列中
				Quene.prototype.enqueue = function (element) {
					this.items.push(element);
				};

				// 2. 从队列中删除前端元素
				Quene.prototype.delqueue = function () {
					return this.items.shift();
				};

				// 3. 查看前端元素
				Quene.prototype.front = function () {
					return this.items[0];
				};

				// 4. 查看队列是否为空
				Quene.prototype.isEmpty = function () {
					return this.items.length === 0;
				};

				// 5. 查看队列中元素的个数
				Quene.prototype.size = function () {
					return this.items.length;
				};

				// 6. toString 方法
				Quene.prototype.toString = function () {
					let resultString = '';
					for (let i = 0; i < queue.size(); i++) {
						resultString += this.items[i] + ' ';
					}
					return resultString;
				};
			}

			// 击鼓传花
			function passGame(nameList, num) {
				// 1. 创建一个队列结构
				let queue = new Quene();

				// 2. 将所有人依次加入到队列中
				for (let i = 0; i < nameList.length; i++) {
					queue.enqueue(nameList[i]);
				}

				// 3. 开始数数字
				while (queue.size() != 1) {
					// 不是 num 时，重新加入到队列末尾
					// 是 num 时，将其从队列中删除
					// 3.1 num 之前的人重新放入队列的末尾
					for (let i = 0; i < num - 1; i++) {
						queue.enqueue(queue.delqueue());
					}
					// 3.2 num 对应的这个人，直接从队列中删除掉
					queue.delqueue();
				}

				// 4. 获取剩下的那个人
				console.log(queue.size());
				let endName = queue.front();
				console.log('最终剩下的人：' + endName);

				return nameList.indexOf(endName);
			}

			// 测试击鼓传花代码
			names = ['vae', 'uae', 'oae', 'darkgreen', 'dkh'];
			console.log(passGame(names, 3));
		</script>
	</body>
</html>
